//
//  QMAAppEnvironmentDelegate.h
//  Pods
//
//  Created by elvisgao on 2019/12/5.
//


#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import "QMAAppUserInfo.h"

NS_ASSUME_NONNULL_BEGIN

typedef NS_ENUM(NSInteger, QMANetWorkStatus) {
    QMANetWorkStatus_Unknown = -1,          // 未知类型网络
    QMANetWorkStatus_NotReachable = 0,      // 网络不可用
    QMANetWorkStatus_ReachableViaWiFi = 1,  // wifi
    QMANetWorkStatus_ReachableVia2G = 2,    // 2G
    QMANetWorkStatus_ReachableVia3G = 3,    // 3G
    QMANetWorkStatus_ReachableVia4G = 4,    // 4G
    QMANetWorkStatus_ReachableVia5G = 5     // 5G
};

// SDK宿主平台的用户账号来源 qq/微信/电话号码登录/匿名登录/其他方式
typedef NS_ENUM(NSInteger, QMASourceUinPlatform) {
    QMASourceUinPlatformQQ = 1,
    QMASourceUinPlatformWechat,
    QMASourceUinPlatformPhone,
    QMASourceUinPlatformAnonymous,
    QMASourceUinPlatformOther,
};

typedef NS_ENUM(NSInteger, QMAIPStackType) {
    QMAIPStackType_IPv4_IPv6 = 0,
    QMAIPStackType_IPv4Only = 1,
    QMAIPStackType_IPv6Only = 2,
};

typedef void (^QMAAppFetchUserInfoBlock)(QMAAppUserInfo * _Nullable userInfo);

@protocol QMAAppEnvironmentDelegate <NSObject>


#pragma mark - 宿主平台信息

/**
 * @brief SDK宿主应用名称
 * 主要用于文案提示使用
 */
- (NSString *)appName;

/**
 * @brief SDK宿主平台版本
 * @return 返回的是小写字符串，例如1.0.0
 */
- (NSString *)getAppVersion;

/**
 * @brief SDK宿主平台QUA
 * 格式:  "V1_IPH_MINISDK_" + version + "_1_" + hostPlatform +"_B"
 * 如果是微视接入，V1_IPH_MINISDK_1.0.0_1_WEISHI_B
 * 版本号后面的是app包的标识，1 是appstore包，3是灰度包，5是众测包
 */
- (NSString *)getAppQUA;

/**
 * @brief SDK宿主平台设备信息
 * @return 格式 model=***&os=***&display=***&ifa=***&idfa=***
 */
- (NSString *)getAppDeviceInfo;

/**
 * @brief SDK宿主平台的网络状态
 */
- (QMANetWorkStatus)getAppNetworkStatus;

/**
 * @brief SDK宿主平台的机型信息
 */
- (NSString *)getAppIPhoneModel;

/**
 * @brief SDK宿主平台的imei16
 */
- (NSString *)imei;

/**
 * @brief 新版qimei,SDK宿主平台的QImei36
 */
- (NSString *)qimei36;

/**
 * @brief SDK宿主平台的idfa
 */
- (NSString *)idfa;

/**
 * @brief SDK宿主平台的WifiBSSID
 */
- (NSString *)wifiBSSID;

/**
 * @brief SDK宿主平台的本地ip
 */
- (NSString *)localIP;

/**
 * @brief SDK宿主平台的gps信息
 * @return NSDictionary
 * key: "longitude" 和 "latitude"，v
 * value: CLLocationCoordinate2D中的longitude和latitude
 */
- (NSDictionary *)lbsModelLocation;

/**
*  @brief SDK宿主IP协议栈类型，默认IPv4和IPv6双栈
*/
- (QMAIPStackType)ipStackType;


@optional

/// 宿主头像白名单域名列表
- (NSArray<NSString *> *)whiteDomainList;


#pragma mark - 用户相关 -

/**
 * @brief SDK宿主平台的用户账号来源
 */
- (QMASourceUinPlatform)getAppUIDPlatform;

/**
 * @brief SDK宿主平台的用户昵称,默认返回"QQ小程序"
 */
- (NSString *)getAppNickName;

/**
 * @brief SDK宿主平台的用户头像,默认返回demo图片
 */
- (UIImage *)getAppAvatar;

/**
 * @brief 根据scope拉取SDK宿主平台的用户头像和昵称，头像返回UIView，block必须运行在主线程!!!
 */
- (void)fetchAppUserInfoWithScope:(NSString *)scope block:(QMAAppFetchUserInfoBlock)block;

@end

NS_ASSUME_NONNULL_END



